<?php
/**
 *  User：LRZ
 *  Date：2020/2/19
 *  Time：17:00
 */

/**
 *  1351.统计有序矩阵中的负数
 *
 *  标签：数组、二分查找
 *
 *  给你一个 m * n 的矩阵 grid，矩阵中的元素无论是按行还是按列，都以非递增顺序排列。 
 *  请你统计并返回 grid 中 负数 的数目。
 *
 *  示例 1：
 *      输入：grid = [[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]]
 *      输出：8
 *      解释：矩阵中共有 8 个负数。
 *
 *  示例 2：
 *      输入：grid = [[3,2],[1,0]]
 *      输出：0
 *
 *  示例 3：
 *      输入：grid = [[1,-1],[-1,-1]]
 *      输出：3
 *
 *  示例 4：
 *      输入：grid = [[-1]]
 *      输出：1
 *   
 *  提示：
 *      m == grid.length
 *      n == grid[i].length
 *      1 <= m, n <= 100
 *      -100 <= grid[i][j] <= 100
 *
 *  来源：力扣（LeetCode）
 *  链接：https://leetcode-cn.com/problems/count-negative-numbers-in-a-sorted-matrix
 *  著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */

$start = microtime(true);

$grid = [[4, 3, 2, -1], [3, 2, 1, -1], [1, 1, -1, -2], [-1, -1, -2, -3]];
$res  = countNegatives($grid);

$end = microtime(true);
print_r($res);
printf(' total run: %.2f s<br>' . 'memory usage: %.2f M<br> ', $end - $start, memory_get_usage() / 1024 / 1024);

function countNegatives($grid)
{
    $res = 0;
    foreach ($grid as $v) {
        sort($v);
        foreach ($v as $v2) {
            if ($v2 < 0) {
                $res++;
            } else {
                break;
            }
        }
    }
    return $res;
}